#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>
#include <syslog.h>

void create_daemon() 
{
    pid_t pid;
    int i = 0;
    // 1. 创建子进程，父进程退出
    pid = fork();
    if (pid < 0) {
        perror("fork");
        exit(1);
    }
    if (pid > 0) {
        exit(0);  // 父进程退出
    }
    
    // 2. 在子进程中创建新会话
    if (setsid() < 0) {
        perror("setsid");
        exit(1);
    }
    
    // 3. 改变当前工作目录到根目录
    if (chdir("/") < 0) {
        perror("chdir");
        exit(1);
    }
    
    // 4. 重设文件权限掩码
    umask(0);

    // 5. 关闭所有打开的文件描述符
    for (i = 0; i < 3; i++) {
        close(i);
    }
}

int main() 
{
    create_daemon();    
    // 守护进程的主要工作
    while (1) {
        //.....
        sleep(10);  // 休眠10秒
        syslog(LOG_INFO, "Daemon process is running...");
    }
    
    return 0;
}
